﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace BoletoElectronicoDesktop.AbmBeneficiarios
{
    public partial class FormModificarBeneficiario : Form
    {
        public string idBeneficiario;
        public DataTable tablaPostnets;

        public FormModificarBeneficiario()
        {
            InitializeComponent();
        }

        private void FormModificarBeneficiario_Load(object sender, EventArgs e)
        {
            //abro el formulario maximizado
            this.WindowState = FormWindowState.Maximized;
            
            //deshabilito los botones de seleccionar y el combo de modelo
            btnSeleccionar.Enabled = false;
            cbModelo.Enabled = false;

            //cargo los datos del beneficiario
            DataTable beneficiario = BeneficiarioDAO.ObtenerBeneficiario(idBeneficiario);
            txtRazonSocial.Text = beneficiario.Rows[0]["BeneficiarioRazonSocial"].ToString();
            txtCalle.Text = beneficiario.Rows[0]["BeneficiarioCalle"].ToString();
            txtNum.Text = beneficiario.Rows[0]["BeneficiarioNumeroCalle"].ToString();
            txtPiso.Text = beneficiario.Rows[0]["BeneficiarioPiso"].ToString();
            txtDepto.Text = beneficiario.Rows[0]["BeneficiarioDepartamento"].ToString();

            //cargo las rubros en el ComboBox
            DataTable rubros = BeneficiarioDAO.ObtenerRubros();
            comboRubro.DataSource = rubros;
            comboRubro.DisplayMember = "DescripcionRubro";
            comboRubro.ValueMember = "IdRubro";
            comboRubro.SelectedValue = beneficiario.Rows[0]["BeneficiarioRubroID"].ToString();

            //cargo el checkbox
            string habilitado = beneficiario.Rows[0]["BeneficiarioHabilitado"].ToString();
            if (string.Compare(habilitado, "True") == 0)
            {
                cbHabilitado.Checked = true;
                cbHabilitado.Enabled = false;

            }
            else
                cbHabilitado.Enabled = true;

            //obtengo los postnets habilitados del beneficiario
            DataTable postnets = BeneficiarioDAO.ObtenerPostnetsHabilitadosBeneficiario(idBeneficiario);
            //creo la tabla de postnets
           

            //creo las columnas del dataTable
            tablaPostnets = new DataTable();

            tablaPostnets.Columns.Add("NumeroPostnet", typeof(string));
            tablaPostnets.Columns.Add("IdMarca", typeof(string));
            tablaPostnets.Columns.Add("DescripcionMarca", typeof(string));
            tablaPostnets.Columns.Add("IdModelo", typeof(string));
            tablaPostnets.Columns.Add("DescripcionModelo", typeof(string));
            
            //paso los datos de postnets a la tabla
            for (int i = 0; i < postnets.Rows.Count; i++)
            {
                string numeroPostnet = postnets.Rows[i]["PostnetNumeroSerie"].ToString();
                string idMarca = postnets.Rows[i]["PostnetMarca"].ToString();
                string nombreMarca = postnets.Rows[i]["PostnetMarcaDescripcion"].ToString();
                string idModelo = postnets.Rows[i]["PostnetModelo"].ToString();
                string nombreModelo = postnets.Rows[i]["PostnetModeloDescripcion"].ToString();

                tablaPostnets.Rows.Add(numeroPostnet, idMarca, nombreMarca, idModelo, nombreModelo);
            }           
            
            dataGridView1.DataSource = tablaPostnets;
            dataGridView1.Columns["IdModelo"].Visible = false;
            dataGridView1.Columns["IdMarca"].Visible = false;
            
        }//fin load
        private void txtNum_KeyPress(object sender, KeyPressEventArgs e)
        {
            Funciones.validarNumero(e);
        }

        private void txtNumeroPostnet_KeyPress(object sender, KeyPressEventArgs e)
        {
            Funciones.validarNumero(e);
        }

        private void cbMarca_Click(object sender, EventArgs e)
        {
            //cargo las marcas de los posibles postnets
            DataTable marcas = BeneficiarioDAO.ObtenerMarcas();
            cbMarca.DataSource = marcas;
            cbMarca.DisplayMember = "DescripcionMarca";
            cbMarca.ValueMember = "IdMarca";
            btnSeleccionar.Enabled = false;
            cbModelo.Enabled = true;
        }

        private void cbModelo_Click(object sender, EventArgs e)
        {
            DataTable modelo = BeneficiarioDAO.ObtenerModelos(cbMarca.SelectedValue.ToString());
            cbModelo.DataSource = modelo;
            cbModelo.DisplayMember = "DescripcionModelo";
            cbModelo.ValueMember = "IdModelo";
            btnSeleccionar.Enabled = true;
        }

        private void btnSeleccionar_Click(object sender, EventArgs e)
        {
            if (txtNumeroPostnet.Text == "")
                MessageBox.Show("Ingrese el número de postnet");
            else // el usuario ingreso algo
            {
                int existeHabilitado = BeneficiarioDAO.ExistePostnetHabilitado(txtNumeroPostnet.Text);

                if (existeHabilitado != 0) //ya existe el numero de postnet y está habilitado
                {
                    //valido que sea propio
                    int esPropio = BeneficiarioDAO.EsPostnetPropio(idBeneficiario, txtNumeroPostnet.Text);
                   
                    if (esPropio == 0) // es el postnet de alguien más
                        MessageBox.Show("El postnet pertenece a otro beneficiario");
                    else // es propio
                    {

                        //valido que no lo acabe de eliminar por error
                        int existeEnDataTable = 0;
                        for (int i = 0; i < tablaPostnets.Rows.Count; i++)
                        {
                            if (String.Compare(Convert.ToString(tablaPostnets.Rows[i][0].ToString()), txtNumeroPostnet.Text.ToString()) == 0)
                                existeEnDataTable = 1;
                        }
                        if (existeEnDataTable == 1)
                        {
                            MessageBox.Show("El número de postnet que desea agregar ya existe");

                        }
                        else //lo elimino por error => si el modelo es el mismo Y ES PROPIO, permito q lo agregue
                        {
                            int existeConModelo = BeneficiarioDAO.ExistePostnetHabilitadoConModelo(txtNumeroPostnet.Text, cbModelo.SelectedValue.ToString());
                            if (existeConModelo == 0)
                                MessageBox.Show("Ya existe ese número de postnet");
                            else
                           {
                            string idMarca = cbMarca.SelectedValue.ToString();
                            string nombreMarca = cbMarca.Text;
                            string idModelo = cbModelo.SelectedValue.ToString();
                            string nombreModelo = cbModelo.Text;
                            tablaPostnets.Rows.Add(txtNumeroPostnet.Text, idMarca, nombreMarca, idModelo, nombreModelo);
                            dataGridView1.DataSource = tablaPostnets;
                            dataGridView1.Columns["IdModelo"].Visible = false;
                            dataGridView1.Columns["IdMarca"].Visible = false;
                            cbModelo.DataSource = null;
                            cbMarca.DataSource = null;
                            cbModelo.Enabled = false;
                            txtNumeroPostnet.Text = "";
                            } //fin else existe con modelo
                       } //fin else existeEnDataTable
                     }//fin else es propio

                    }//fin existe habilitado
                
                 else // el numero de posnet no existe habilitado
                {
                    //busco si existe inhabilitado
                    int existeInhabilitado = BeneficiarioDAO.ExistePostnetInhabilitado(txtNumeroPostnet.Text);

                    if (existeInhabilitado != 0) //existe inhabilitado => valido que el modelo sea el mismo y que sea un postnet propio
                    {
                        //valido que sea propio
                        int esPropio = BeneficiarioDAO.EsPostnetPropio(idBeneficiario, txtNumeroPostnet.Text);
                        if (esPropio == 0) // es el postnet de alguien más
                            MessageBox.Show("El postnet pertenece a otro beneficiario");
                        else // es propio
                        {
                            int existeEnBase = BeneficiarioDAO.ExistePostnetInhabilitadoConModelo(txtNumeroPostnet.Text, cbModelo.SelectedValue.ToString());

                            if (existeEnBase == 0) //significa que existe el postnet pero con un modelo diferente en la base => no lo permito agregar
                            {
                                MessageBox.Show("Ya existe un postnet con el número ingresado");

                            }
                            else // el postnet existe con ese modelo inhabilitado => lo puedo agregar a la lista si es propio
                            {
                                int existeEnDataTable = 0;
                                for (int i = 0; i < tablaPostnets.Rows.Count; i++)
                                {
                                    if (String.Compare(Convert.ToString(tablaPostnets.Rows[i][0].ToString()), txtNumeroPostnet.Text.ToString()) == 0)
                                        existeEnDataTable = 1;
                                }
                                if (existeEnDataTable != 0)
                                    MessageBox.Show("Acaba de ingresar ese número de postnet!");
                                else //numero valido en la base y en el datatable => lo agrego al datatable y datagrid
                                {

                                    string idMarca = cbMarca.SelectedValue.ToString();
                                    string nombreMarca = cbMarca.Text;
                                    string idModelo = cbModelo.SelectedValue.ToString();
                                    string nombreModelo = cbModelo.Text;
                                    tablaPostnets.Rows.Add(txtNumeroPostnet.Text, idMarca, nombreMarca, idModelo, nombreModelo);
                                    dataGridView1.DataSource = tablaPostnets;
                                    dataGridView1.Columns["IdModelo"].Visible = false;
                                    dataGridView1.Columns["IdMarca"].Visible = false;
                                    cbModelo.DataSource = null;
                                    cbMarca.DataSource = null;
                                    cbModelo.Enabled = false;
                                } //fin else que agrega
                            }//fin else modelo + propio
                            cbModelo.DataSource = null;
                            cbMarca.DataSource = null;
                            cbModelo.Enabled = false;
                            txtNumeroPostnet.Text = "";
                        } //fin else es propio
                    }
                    else //no existe habilitado ni inhabilitado => puedo agregarlo a la lista
                    {
                        int existeEnDataTable = 0;
                        for (int i = 0; i < tablaPostnets.Rows.Count; i++)
                        {
                            if (String.Compare(Convert.ToString(tablaPostnets.Rows[i][0].ToString()), txtNumeroPostnet.Text.ToString()) == 0)
                                existeEnDataTable = 1;
                        }
                        if (existeEnDataTable != 0)
                            MessageBox.Show("Acaba de ingresar ese número de postnet!");
                        else //numero valido en la base y en el datatable => lo agrego al datatable y datagrid
                        {

                            string idMarca = cbMarca.SelectedValue.ToString();
                            string nombreMarca = cbMarca.Text;
                            string idModelo = cbModelo.SelectedValue.ToString();
                            string nombreModelo = cbModelo.Text;
                            tablaPostnets.Rows.Add(txtNumeroPostnet.Text, idMarca, nombreMarca, idModelo, nombreModelo);
                            dataGridView1.DataSource = tablaPostnets;
                            dataGridView1.Columns["IdModelo"].Visible = false;
                            dataGridView1.Columns["IdMarca"].Visible = false;
                            cbModelo.DataSource = null;
                            cbMarca.DataSource = null;
                            cbModelo.Enabled = false;
                        }

                    }


                }

                txtNumeroPostnet.Text = "";
                btnSeleccionar.Enabled = false;
                cbModelo.DataSource = null;
                cbMarca.DataSource = null;
                cbModelo.Enabled = false;
            }
        
        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            int indice = dataGridView1.CurrentRow.Index;
            tablaPostnets.Rows[indice].Delete();
            dataGridView1.DataSource = tablaPostnets;
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            if ((txtRazonSocial.Text == "") || (txtCalle.Text == "") || (txtNum.Text == "") || (tablaPostnets.Rows.Count == 0))
            {
                MessageBox.Show("Complete todos los datos obligatorios");

            }
            else //todos los campos obligatorios completos
            {

                //verifico que la razon social no exista si es diferente 
                int existe = BeneficiarioDAO.ExisteRazonSocialDiferente(idBeneficiario, txtRazonSocial.Text);
                if (existe != 0)
                {
                    MessageBox.Show("Ya existe un beneficiario con esa razón social");
                }
                else // la razon social no existe => puedo modificar los datos del beneficiario
                {
                    string hab;
                    if (cbHabilitado.Checked == true)
                        hab = "True";
                    else
                        hab = "False";

                    BeneficiarioDAO.ModificarBeneficiario(idBeneficiario, txtRazonSocial.Text, txtCalle.Text, txtNum.Text, txtPiso.Text, txtDepto.Text, comboRubro.SelectedValue.ToString(), hab);
                    //doy de baja todos sus postnets
                    BeneficiarioDAO.DarDeBajaPostnets(idBeneficiario);

                    //por cada uno de los potnets de la datatable, los doy de alta/ habilito
                    for (int i = 0; i < tablaPostnets.Rows.Count; i++)
                    {
                        string numeroPostnet = tablaPostnets.Rows[i]["NumeroPostnet"].ToString();
                        int existePostnet = BeneficiarioDAO.ExistePostnet(numeroPostnet);
                        if (existePostnet != 0) //lo habilito
                            BeneficiarioDAO.HabilitarPostnet(numeroPostnet);
                        else // el postnet no existe => lo creo
                        {
                            string idModelo = tablaPostnets.Rows[i]["IdModelo"].ToString();
                            BeneficiarioDAO.InsertarPostnet(numeroPostnet, idBeneficiario, idModelo);
                        }

                    }
                    MessageBox.Show("Modificación realizada con éxito");
                }//fin else
            }
        }
       
    }//fin clase

}//fin namespace
